package cn.com.zero.common.auth.service;

import cn.com.zero.api.auth.vo.OnlineUserVO;
import cn.com.zero.db.vo.PageParamsVO;
import cn.com.zero.db.vo.PageVO;

import java.util.Date;
import java.util.List;

/**
 * @author xiongxj
 * @version 1.0.0
 * @Description 在线用户用户相关操作的service接口
 * @createTime 2023/3/28 17:35
 */
public interface IOnlineUserService {

    /**
     * 查询指定端的在线用户
     *
     * @param userBelongToSide 用户所属的端
     * @param pageParams       分页参数
     * @param searchUserIds    搜索条件，按照用户ID搜索，支持精确搜索
     * @param loginDevice      搜索条件，按照登录设备搜索，支持精确搜索
     * @param loginIp          搜索条件，按照登录IP搜索，支持模糊搜索
     * @param loginBeginTime   搜索条件，按照登录时间搜索，搜索的开始时间
     * @param loginEndTime     搜索条件，按照登录时间搜索，搜索的结束时间
     * @return 所有的在线用户信息，默认按照登录时间正序
     */
    PageVO<OnlineUserVO> getOnlineUsers(String userBelongToSide, PageParamsVO pageParams,
                                        List<String> searchUserIds, String loginDevice, String loginIp,
                                        Date loginBeginTime, Date loginEndTime);

    /**
     * 强制下线在线用户
     *
     * @param userBelongToSide 用户所属端
     * @param userId           用户ID
     * @param loginDevice      登录设备
     * @return 强制下线在线用户操作结果，true：操作成功；false：操作失败
     */
    boolean kickOffUser(String userBelongToSide, String userId, String loginDevice);

}
